rebol(Parse函数转换的语法是)
资讯
2023-11-24
499
1. rebol,Parse函数转换的语法是?
parse函数转换的语法主要根据控制流进行改变,提到Rebol语言的优秀特性那就不得不说它的解析引擎,简称Parse。这项来自Carl Sassenrath的伟大设计,在过去的15年里,使得Rebol用户免受正则表达式(以不可维护著称)的折磨。现如今,Parse的增强版本在Red语言中重装上阵。
简而言之,Parse是一个使用语法规则来解析输入序列的内部DSL(在Rebol生态圈称为“方言”)。Parse方言是TDPL家族的突出一员。常用来校验,验证,分解,修改输入的数据,甚至是实现内部或者外部DSL。parse函数的用法很简单:bitset. 实现并支持DSL的发展:parse <输入序列> <规则> <输入序列>: 任意序列类型的值(字符串,文件,区块,路径...) <规则>: 一个区块(包含有效的Parse方言)123123
下面的示例代码可以直接复制到Red控制台中运行,即便你不懂Red和Parse方言,也能观其大略,不像正则表达式那样让人不知所云。使用语法规则验证一些字符串和区块的输入:parse "a plane" [["a" | "the"] space "plane"] ;规则中可以包含子规则 parse "the car" [["a" | "the"] space ["plane" | "car"]] parse "123" ["1" "2" ["4" | "3"]] parse "abbccc" ["a" 2 "b" 3 "c"] ;指定数量 parse "aaabbb" [copy letters some "a" (n: length? letters) n "b"] ;将匹配绑定到变量,使用小括号执行Red表达式 parse [a] ['b | 'a | 'c] parse [hello nice world] [3 word!] ;匹配区块可以使用类型 parse [a a a b b b] [copy words some 'a (n: length? words) n 'b]1234567891012345678910
下面展示如何解析IPv4地址:four: charset "01234" ;charset函数用于创建一个bitset!类型的值 half: charset "012345" non-zero: charset "123456789" digit: union non-zero charset "0" ;bitset!类型可以使用Red的集合运算union函数进行组合 byte: [ "25" half | "2" four digit | "1" digit digit | non-zero digit | digit ] ipv4: [byte dot byte dot byte dot byte] parse "192.168.10.1" ipv4 parse "127.0.0.1" ipv4 parse "99.1234" ipv4 parse "10.12.260.1" ipv4 data: { ID: 121.34 Version: 1.2.3-5.6 Your IP address is: 85.94.114.88. NOTE: Your IP Address could be different tomorrow. } parse data [some [copy value ipv4 | skip]] probe value ; 输出: "85.94.114.88"123456789101112131415161718192021222324252627123456789101112131415161718192021222324252627
一个粗糙然而实用的email地址验证器:digit: charset "0123456789" letters: charset [#"a" - #"z" #"A" - #"Z"] special: charset "-" chars: union union letters special digit word: [some chars] host: [word] domain: [word some [dot word]] email: [host "@" domain] parse "john@doe.com" email parse "n00b@lost.island.org" email parse "h4x0r-l33t@domain.net" email123456789101112123456789101112
验证字符串形式的数学表达式(来自Rebol/Core手册)expr: [term ["+" | "-"] expr | term] ;规则可以递归定义 term: [factor ["*" | "/"] term | factor] factor: [primary "**" factor | primary] primary: [some digit | "(" expr ")"] digit: charset "0123456789" parse "1+2*(3-2)/4" expr ; 返回 true parse "1-(3/)+2" expr ; 返回 false1234567812345678
创建简单的解析器用于解析一个HTML子集:html: { <html> <head><title>Test</title></head> <body><div><u>Hello</u> <b>World</b></div></body> </html> } ws: charset reduce [space tab cr lf] parse html tags: [ collect [any [ ws | "</" thru ">" break | "<" copy name to ">" skip keep (load name) opt tags | keep to "<" ]] ] ; parse函数将会返回如下区块树 [ html [ head [ title ["Test"] ] body [ div [ u ["Hello"] b ["World"] ] ] ] ]12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132
Parse方言,parse/trace <输入> <规则> <回调函数>
<回调函数> 规格:
func [
event [word!] ; 跟踪事件
match? [logic!] ; 上次匹配操作的结果
rule [block!] ; 当前位置的对应规则
input [series!] ; 将要匹配的下一个位置的输入序列
stack [block!] ; 内部的解析规则栈
return: [logic!] ; TRUE: 继续匹配, FALSE: 退出
]
事件列表:
- push : 当一个规则或者区块入栈时
- pop : 当一个规则或者区块出栈之前
- fetch : 当一个新的规则被采用之前
- match : 当一个值匹配发生了
- iterate : 当一个新的迭代开始了 (ANY, SOME, ...)
- paren : 当一个小括号中的表达式被求值后
- end : 当到达输入末尾时。
2. 哪一个精通的价值最宝贵?
1、web page script languages
就是网页代码,比如Html、javascript、Css、Asp、Php、Xml都应该属于此类(照蔡的意思,Html不应该属于anguages的,可能他觉得太简单了吧,不过我觉得Html也应该算的,大家爱听谁的就听谁的好了,这个不重要)
2、Interpreted Languages(解释型语言)
包括Perl、Python、REBOL、Ruby等(后面三个听豆没听过),也常被称作Script语言,通常被用于和底下的操作系统沟通。照蔡的意思,每个人至少应该学会一套这类的语言。这类语言的缺点是效率差、源代码外露——所以不适合用来开发软件产品,一般用于网页服务器。
3、Hybrid Laguages(混合型语言)
代表是JAVA和C#。介于解释型和编译型之间。蔡认为C#是.NET最重要的语言,值得期待其后续发展;至于JAVA,蔡叫看他的《Sleepless in Java》——我倒!
4、COMPILING Languages(编译型语言)
C/C++,JAVA都是编译型语言。蔡说C++很复杂,要成为高手没三五年是不行的(就凭这句话,我决定向JAVA投降),虽然如此,但真正要成为高手的都应该懂C/C++。
关于Delphi,蔡说如果想要跨Linux和Windows平台的语言,则Delphi似乎是最好的选择。
5、Assembly Languages(汇编语言)
汇编语言是最接近于硬件的语言,不过现在几乎没多少人用了。
程序语言学习顺序建议
如果完全没有程序经验,可照这个顺序:javascript——解释型语言——混合型语言——编译型语言——汇编(如果需要的话)
用业界流行一句话做结尾“真正的程序员用C++,聪明的程序员用Delphi”,那么,什么样的程序员用JAVA呢?
虚怀若谷题外话
看在我这么晚了还这么辛苦的敲字的面子上,看到这篇帖子的朋友给点掌声吧,虽然没什么自己的思想。
另外,本文完全据蔡学镛先生同名文章精简,所以如果这篇文章给你的程序员生涯有什么不好的作用,那我不介意你去扁他。当然如果这篇文章对你有什么积极影响,我很高兴你能请我吃大餐。
如果您想学习编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧!
方案一 Basic语言 & Visual Basic
优点
(1)Basic 简单易学,很容易上手。
(2)Visual Basic 提供了强大的可视化编程能力,可以让你轻松地做出漂亮的程序。
(3)众多的控件让编程变得象垒积木一样简单。
(4)Visual Basic 的全部汉化让我们这些见了English就头大的人喜不自禁。
缺点
(1)Visual Basic 不是真正的面向对象的开发文具。
(2)Visual Basic 的数据类型太少,而且不支持指针,这使得它的表达能力很有限。
(3)Visual Basic 不是真正的编译型语言,它产生的最终代码不是可执行的,是一种伪代码。它需要一个动态链接库去解释执行,这使得Visual Basic 的编译速度大大变慢。
综述:方案一适合初涉编程的朋友,它对学习者的要求不高,几乎每个人都可以在一个比较短的时间里学会vB编程,并用VB 做出自己的作品。对于那些把编程当做游戏的朋友来说,VB 是您最佳的选择。
方案二 Pascal语言 & Delphi
优点
(1)Pascal语言结构严谨,可以很好地培养一个人的编程思想。
(2)Delphi是一门真正的面向对象的开发工具,并且是完全的可视化。
(3)Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。
(4)Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。
缺点
Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。
综述: 方案二比较适合那些具有一定编程基础并且学过Pascal语言的朋友。
方案三 C语言 & Visual C++
优点
(1)C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。
(2)微软的MFC库博大精深,学会它可以让随心所欲地进行编程。
(3)VC是微软制作的产品,与操作系统的结合更加紧密。
缺点
对使用者的要求比较高,既要具备丰富的C语言编程经验,又要具有一定的WINDOWS编程基础,它的过于专业使得一般的编程爱好者学习起来会有不小的困难。
综述: VC是程序员用的东西。如果你是一个永不满足的人,而且可以在编程上投入很大的精力和时间,那么学习VC你一定不会后悔的。
方案四 C++语言 & C++ Builder
优点
(1)C++语言的优点全部得以继承。
(2)完全的可是化。
(3)极强的兼容性,支持OWL、VCL和MFC三大类库。
(4)编译速度非常快。
缺点
由于推出的时间太短,关于它的各种资料还不太多。
综述:我认为C++ Builder 是最好的编程工具。它既保持了C++语言编程的优点,又做到了完全的可视化。
方案五 SQL语言 & Power Builder
对于一些传统的数据开发人员来说,Foxpro系列也许让他们感到更加熟悉。但是对于初学者来说,PowerBuilder也许是最好的数据库开发工具。各种各样的控件,功能强大的PowerBuilder语言都会帮助你开发出自己的数据库应用程序。
补充:关于网页后台语言和其他语言的关系,一般认为:
C语言学的好,那么学习PHP会有事半功倍的效果
VC学的好,那么学习ASP会有事半功倍的效果
JAVA学的好,那么学习JSP、JAVASCRIPT会有事半功倍的效果
关于网页后台语言和数据库,通常来说:
PHP与MYSQL是黄金搭档
ASP小型网站用ACCESS,大型用SQL
JSP我就不知道了
关于电子商务流行的语言,目前
当当、卓越、6688、igo5、雅宝使用的是asp语言
易趣、淘宝使用的是php语言
贝塔斯曼使用的是jsp语言
4、至少学会以下的其中两种:
一、网站服务器程序ASP、PHP、CGI、JSP
我个人认为CGI是最难学的其中一种。
二、程序语言:C语言、C++、VB、JAVA、PERL、DELPHI、汇编语言
不过我认为C语言的通用性最好,可以跨平台(操作系统)使用。
还要试着自己写程序、开发软件等工作。
三、数据库管理软件:MYSQL、SQL、FOXPRO……等。
四、几种常用的操作系统:WIN10、WIN7、WINNT、WINXP、UNIX、LINUX、要是能学到UNIX那是最好不过的了。最最基本的WIN2K、WINNT也要学会吧。
如果以上的你都会了,那么你已经是个高手了
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!
1. rebol,Parse函数转换的语法是?
parse函数转换的语法主要根据控制流进行改变,提到Rebol语言的优秀特性那就不得不说它的解析引擎,简称Parse。这项来自Carl Sassenrath的伟大设计,在过去的15年里,使得Rebol用户免受正则表达式(以不可维护著称)的折磨。现如今,Parse的增强版本在Red语言中重装上阵。
简而言之,Parse是一个使用语法规则来解析输入序列的内部DSL(在Rebol生态圈称为“方言”)。Parse方言是TDPL家族的突出一员。常用来校验,验证,分解,修改输入的数据,甚至是实现内部或者外部DSL。parse函数的用法很简单:bitset. 实现并支持DSL的发展:parse <输入序列> <规则> <输入序列>: 任意序列类型的值(字符串,文件,区块,路径...) <规则>: 一个区块(包含有效的Parse方言)123123
下面的示例代码可以直接复制到Red控制台中运行,即便你不懂Red和Parse方言,也能观其大略,不像正则表达式那样让人不知所云。使用语法规则验证一些字符串和区块的输入:parse "a plane" [["a" | "the"] space "plane"] ;规则中可以包含子规则 parse "the car" [["a" | "the"] space ["plane" | "car"]] parse "123" ["1" "2" ["4" | "3"]] parse "abbccc" ["a" 2 "b" 3 "c"] ;指定数量 parse "aaabbb" [copy letters some "a" (n: length? letters) n "b"] ;将匹配绑定到变量,使用小括号执行Red表达式 parse [a] ['b | 'a | 'c] parse [hello nice world] [3 word!] ;匹配区块可以使用类型 parse [a a a b b b] [copy words some 'a (n: length? words) n 'b]1234567891012345678910
下面展示如何解析IPv4地址:four: charset "01234" ;charset函数用于创建一个bitset!类型的值 half: charset "012345" non-zero: charset "123456789" digit: union non-zero charset "0" ;bitset!类型可以使用Red的集合运算union函数进行组合 byte: [ "25" half | "2" four digit | "1" digit digit | non-zero digit | digit ] ipv4: [byte dot byte dot byte dot byte] parse "192.168.10.1" ipv4 parse "127.0.0.1" ipv4 parse "99.1234" ipv4 parse "10.12.260.1" ipv4 data: { ID: 121.34 Version: 1.2.3-5.6 Your IP address is: 85.94.114.88. NOTE: Your IP Address could be different tomorrow. } parse data [some [copy value ipv4 | skip]] probe value ; 输出: "85.94.114.88"123456789101112131415161718192021222324252627123456789101112131415161718192021222324252627
一个粗糙然而实用的email地址验证器:digit: charset "0123456789" letters: charset [#"a" - #"z" #"A" - #"Z"] special: charset "-" chars: union union letters special digit word: [some chars] host: [word] domain: [word some [dot word]] email: [host "@" domain] parse "john@doe.com" email parse "n00b@lost.island.org" email parse "h4x0r-l33t@domain.net" email123456789101112123456789101112
验证字符串形式的数学表达式(来自Rebol/Core手册)expr: [term ["+" | "-"] expr | term] ;规则可以递归定义 term: [factor ["*" | "/"] term | factor] factor: [primary "**" factor | primary] primary: [some digit | "(" expr ")"] digit: charset "0123456789" parse "1+2*(3-2)/4" expr ; 返回 true parse "1-(3/)+2" expr ; 返回 false1234567812345678
创建简单的解析器用于解析一个HTML子集:html: { <html> <head><title>Test</title></head> <body><div><u>Hello</u> <b>World</b></div></body> </html> } ws: charset reduce [space tab cr lf] parse html tags: [ collect [any [ ws | "</" thru ">" break | "<" copy name to ">" skip keep (load name) opt tags | keep to "<" ]] ] ; parse函数将会返回如下区块树 [ html [ head [ title ["Test"] ] body [ div [ u ["Hello"] b ["World"] ] ] ] ]12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132
Parse方言,parse/trace <输入> <规则> <回调函数>
<回调函数> 规格:
func [
event [word!] ; 跟踪事件
match? [logic!] ; 上次匹配操作的结果
rule [block!] ; 当前位置的对应规则
input [series!] ; 将要匹配的下一个位置的输入序列
stack [block!] ; 内部的解析规则栈
return: [logic!] ; TRUE: 继续匹配, FALSE: 退出
]
事件列表:
- push : 当一个规则或者区块入栈时
- pop : 当一个规则或者区块出栈之前
- fetch : 当一个新的规则被采用之前
- match : 当一个值匹配发生了
- iterate : 当一个新的迭代开始了 (ANY, SOME, ...)
- paren : 当一个小括号中的表达式被求值后
- end : 当到达输入末尾时。
2. 哪一个精通的价值最宝贵?
1、web page script languages
就是网页代码,比如Html、javascript、Css、Asp、Php、Xml都应该属于此类(照蔡的意思,Html不应该属于anguages的,可能他觉得太简单了吧,不过我觉得Html也应该算的,大家爱听谁的就听谁的好了,这个不重要)
2、Interpreted Languages(解释型语言)
包括Perl、Python、REBOL、Ruby等(后面三个听豆没听过),也常被称作Script语言,通常被用于和底下的操作系统沟通。照蔡的意思,每个人至少应该学会一套这类的语言。这类语言的缺点是效率差、源代码外露——所以不适合用来开发软件产品,一般用于网页服务器。
3、Hybrid Laguages(混合型语言)
代表是JAVA和C#。介于解释型和编译型之间。蔡认为C#是.NET最重要的语言,值得期待其后续发展;至于JAVA,蔡叫看他的《Sleepless in Java》——我倒!
4、COMPILING Languages(编译型语言)
C/C++,JAVA都是编译型语言。蔡说C++很复杂,要成为高手没三五年是不行的(就凭这句话,我决定向JAVA投降),虽然如此,但真正要成为高手的都应该懂C/C++。
关于Delphi,蔡说如果想要跨Linux和Windows平台的语言,则Delphi似乎是最好的选择。
5、Assembly Languages(汇编语言)
汇编语言是最接近于硬件的语言,不过现在几乎没多少人用了。
程序语言学习顺序建议
如果完全没有程序经验,可照这个顺序:javascript——解释型语言——混合型语言——编译型语言——汇编(如果需要的话)
用业界流行一句话做结尾“真正的程序员用C++,聪明的程序员用Delphi”,那么,什么样的程序员用JAVA呢?
虚怀若谷题外话
看在我这么晚了还这么辛苦的敲字的面子上,看到这篇帖子的朋友给点掌声吧,虽然没什么自己的思想。
另外,本文完全据蔡学镛先生同名文章精简,所以如果这篇文章给你的程序员生涯有什么不好的作用,那我不介意你去扁他。当然如果这篇文章对你有什么积极影响,我很高兴你能请我吃大餐。
如果您想学习编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧!
方案一 Basic语言 & Visual Basic
优点
(1)Basic 简单易学,很容易上手。
(2)Visual Basic 提供了强大的可视化编程能力,可以让你轻松地做出漂亮的程序。
(3)众多的控件让编程变得象垒积木一样简单。
(4)Visual Basic 的全部汉化让我们这些见了English就头大的人喜不自禁。
缺点
(1)Visual Basic 不是真正的面向对象的开发文具。
(2)Visual Basic 的数据类型太少,而且不支持指针,这使得它的表达能力很有限。
(3)Visual Basic 不是真正的编译型语言,它产生的最终代码不是可执行的,是一种伪代码。它需要一个动态链接库去解释执行,这使得Visual Basic 的编译速度大大变慢。
综述:方案一适合初涉编程的朋友,它对学习者的要求不高,几乎每个人都可以在一个比较短的时间里学会vB编程,并用VB 做出自己的作品。对于那些把编程当做游戏的朋友来说,VB 是您最佳的选择。
方案二 Pascal语言 & Delphi
优点
(1)Pascal语言结构严谨,可以很好地培养一个人的编程思想。
(2)Delphi是一门真正的面向对象的开发工具,并且是完全的可视化。
(3)Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。
(4)Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。
缺点
Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。
综述: 方案二比较适合那些具有一定编程基础并且学过Pascal语言的朋友。
方案三 C语言 & Visual C++
优点
(1)C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。
(2)微软的MFC库博大精深,学会它可以让随心所欲地进行编程。
(3)VC是微软制作的产品,与操作系统的结合更加紧密。
缺点
对使用者的要求比较高,既要具备丰富的C语言编程经验,又要具有一定的WINDOWS编程基础,它的过于专业使得一般的编程爱好者学习起来会有不小的困难。
综述: VC是程序员用的东西。如果你是一个永不满足的人,而且可以在编程上投入很大的精力和时间,那么学习VC你一定不会后悔的。
方案四 C++语言 & C++ Builder
优点
(1)C++语言的优点全部得以继承。
(2)完全的可是化。
(3)极强的兼容性,支持OWL、VCL和MFC三大类库。
(4)编译速度非常快。
缺点
由于推出的时间太短,关于它的各种资料还不太多。
综述:我认为C++ Builder 是最好的编程工具。它既保持了C++语言编程的优点,又做到了完全的可视化。
方案五 SQL语言 & Power Builder
对于一些传统的数据开发人员来说,Foxpro系列也许让他们感到更加熟悉。但是对于初学者来说,PowerBuilder也许是最好的数据库开发工具。各种各样的控件,功能强大的PowerBuilder语言都会帮助你开发出自己的数据库应用程序。
补充:关于网页后台语言和其他语言的关系,一般认为:
C语言学的好,那么学习PHP会有事半功倍的效果
VC学的好,那么学习ASP会有事半功倍的效果
JAVA学的好,那么学习JSP、JAVASCRIPT会有事半功倍的效果
关于网页后台语言和数据库,通常来说:
PHP与MYSQL是黄金搭档
ASP小型网站用ACCESS,大型用SQL
JSP我就不知道了
关于电子商务流行的语言,目前
当当、卓越、6688、igo5、雅宝使用的是asp语言
易趣、淘宝使用的是php语言
贝塔斯曼使用的是jsp语言
4、至少学会以下的其中两种:
一、网站服务器程序ASP、PHP、CGI、JSP
我个人认为CGI是最难学的其中一种。
二、程序语言:C语言、C++、VB、JAVA、PERL、DELPHI、汇编语言
不过我认为C语言的通用性最好,可以跨平台(操作系统)使用。
还要试着自己写程序、开发软件等工作。
三、数据库管理软件:MYSQL、SQL、FOXPRO……等。
四、几种常用的操作系统:WIN10、WIN7、WINNT、WINXP、UNIX、LINUX、要是能学到UNIX那是最好不过的了。最最基本的WIN2K、WINNT也要学会吧。
如果以上的你都会了,那么你已经是个高手了
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!